﻿#pragma once

#include "Misc/EngineEditorMacros.h"
#include "EditorWindowView.h"
#include "Ability//EditorAbilityViewModel.h"
#include "Ability//EditorAbilityView.h"
#include "EditorMainWindowView.m.h"

class RWindow;
class RWidget;
class REditorWindowViewModel;
class REditorMainWindowViewModel;

class REditorSplitableLayoutView;
class REditorSideBarView;
class REditorPanelView;
class REditorStatusBarView;
class REditorMenuBarView;
class REditorNotificationView;

//view of main window
RCLASS(ExtraHeader=["Widgets/Splitable/EditorSplitableLayoutView.h","AbilityGroup/SideBar/EditorSideBarView.h","AbilityGroup/Panel/EditorPanelView.h" ,"StatusBar/EditorStatusBarView.h","Notification/EditorNotificationView.h","Menubar/EditorMenuBarView.h"])
class ENGINEEDITOR_API REditorMainWindowView : public REditorWindowView
{
    ROBJECT

public:
    REditorMainWindowView();

    virtual void BindViewModel(TSharedObjectPtr<REditorWindowViewModel> InViewModel) override;
   
protected:
    TWeakObjectPtr<REditorMainWindowViewModel> ViewModel;

    void FillWindow();


    void FillWindowBodyWidgets();

    void FillMenuWidgets(TSharedObjectPtr<RWidget> InMenuWidget);
    void FillActivityBarWidgets(TSharedObjectPtr<RWidget> InActivityBarWidget);
    void FillEditorAreaWidgets(TSharedObjectPtr<RWidget> InEditorAreaWidget);

protected:
    RFIELD()
    TSharedObjectPtr<REditorSplitableLayoutView> BodyLayout;

    RFIELD()
    TSharedObjectPtr<REditorSideBarView> MainSideBar;

    RFIELD()
    TSharedObjectPtr<REditorSideBarView> SecondarySideBar;
    RFIELD()
    TSharedObjectPtr<REditorPanelView> PanelView;
    RFIELD()
    TSharedObjectPtr<REditorStatusBarView> StatusBarView;
    RFIELD()
    TSharedObjectPtr<REditorNotificationView> NotificationView; 
    RFIELD()
    TSharedObjectPtr<REditorMenuBarView> MenuBarView;

};



